# shellcheck shell=sh
# shellcheck disable=SC2034
# shellcheck disable=SC2059

# ferreus_orbit Plugins for Dell "Poweredge R720xd|Poweredge R730xd"

fo_get_sorted_name(){
  id=$(fo_get_id)
  [ -z "$id" ] && id=12
  if [ "$USE_FO_NAME" -eq 1 ] || [ "$1" = "-f" ]; then
    echo "Disk${id}"
  else
    echo "sd$(fo_get_dev_letter "${id}")"
  fi
}

fo_get_did(){
  id=$(fo_get_id)
  if [ -z "$id" ];then
    jq -r ".[\"TOPOLOGY\"]|select(.!=null)[]|select(.DG==0)|select(.Type==\"DRIVE\").DID" "${FO_CACHE_FILE_STORCLI}"
  else
    echo "$id"
  fi
}

fo_get_id(){
  grep "$DEVNAME" "${FO_CACHE_WWN}"| cut -d' ' -f3| cut -d/ -f4 | awk -F's' '{print $2}'
}

fo_get_kname(){
  fo_kname=$(grep "$2$" "${FO_CACHE_WWN}"| cut -d' ' -f1 | cut -d/ -f3)
  [ -z "$fo_kname" ] && fo_kname=$(ls /sys/class/scsi_device/0:3:*:0/device/block/)
  echo "$fo_kname"
}

fo_load_wwn(){
  fo_use_cache_file "${FO_CACHE_WWN}" && return 0
  for d in /dev/sd[a-z];do
    eval "$(udevadm info -q property --export "$d")"
    if [ "$ID_MODEL" = "PERC_H740P_Mini" ]; then
      echo "$d $fo_wwn"  >> "${FO_CACHE_WWN}"
    else
      fo_wwn=$(printf "%X" $((ID_WWN - 0x3)))
      raid_path=$(jq -r ".[]|select(..|.WWN?==\"${fo_wwn}\")|to_entries[]|select(.key|endswith(\"State\")).key" "${FO_CACHE_FILE_STORCLI}") 
      if [ -z "$raid_path" ]; then
        fo_wwn=$(printf "%X" $((ID_WWN + 0x3)))
        raid_path=$(jq -r ".[]|select(..|.WWN?==\"${fo_wwn}\")|to_entries[]|select(.key|endswith(\"State\")).key" "${FO_CACHE_FILE_STORCLI}") 
      fi
      if [ -z "$raid_path" ]; then
        fo_wwn=$(printf "%X" "$ID_WWN")
        raid_path=$(jq -r ".[]|select(..|.WWN?==\"${fo_wwn}\")|to_entries[]|select(.key|endswith(\"State\")).key" "${FO_CACHE_FILE_STORCLI}") 
      fi
      raid_path=$(echo "$raid_path"| cut -d' ' -f2)
      echo "$d $fo_wwn $raid_path"  >> "${FO_CACHE_WWN}"
    fi
  done
}

FO_DISPOSITION="""
HDD disposition (Front Panel)
__{UNDERSCORE}___{UNDERSCORE}___{UNDERSCORE}___{UNDERSCORE}__
|{Disk0}|{Disk3}|{Disk6}|{Disk9}|
|{SN_Disk0}|{SN_Disk3}|{SN_Disk6}|{SN_Disk9}|
|-{MINUS}-|-{MINUS}-|-{MINUS}-|-{MINUS}-|
|{Disk1}|{Disk4}|{Disk7}|{Disk10}|
|{SN_Disk1}|{SN_Disk4}|{SN_Disk7}|{SN_Disk10}|
|-{MINUS}-|-{MINUS}-|-{MINUS}-|-{MINUS}-|
|{Disk2}|{Disk5}|{Disk8}|{Disk11}|
|{SN_Disk2}|{SN_Disk5}|{SN_Disk8}|{SN_Disk11}|
¯¯{HIGHER}¯¯¯{HIGHER}¯¯¯{HIGHER}¯¯¯{HIGHER}¯¯

HDD disposition (Rear Panel):
__{UNDERSCORE}___{UNDERSCORE}__
|{Disk12}|{Disk13}|
|{SN_Disk12}|{SN_Disk13}|
¯¯{HIGHER}¯¯¯{HIGHER}¯¯
"""

FO_TEXTILE="""

h3. HDD disposition (Front Panel)

|{Disk0}|{Disk3}|{Disk6}|{Disk9}|
|{Disk1}|{Disk4}|{Disk7}|{Disk10}|
|{Disk2}|{Disk5}|{Disk8}|{Disk11}|

h3. HDD disposition (Rear Panel):

|{Disk12}|{Disk13}|
"""

fo_load_storcli
fo_load_wwn

fo_raid_card=$(jq -r '."Product Name"|select(.!=null)' "${FO_CACHE_FILE_STORCLI}")
if [ "$fo_raid_card" = "PERC H740P Mini " ]; then
      FO_DISPOSITION=$(printf "${FO_DISPOSITION}"|sed "s%SN_Disk13%SN2_Disk12%g")
      FO_DISPOSITION=$(printf "${FO_DISPOSITION}"|sed "s%Disk13%Disk12%g")
      FO_TEXTILE=$(printf "${FO_TEXTILE}"|sed "s%Disk13%Disk12_2%g")
fi
